//
//  XHTopicViewController.m
//  BSNoAnswer
//
//  Created by Tiffany宝 on 16/5/14.
//  Copyright © 2016年 Tiffany. All rights reserved.
//

#import "XHTopicViewController.h"
#import "XHTopicModel.h"
#import "XHTopicViewCell.h"
@interface XHTopicViewController ()

@property (nonatomic,strong) NSMutableArray *topics;
/** 当前页码 */
@property (nonatomic,assign) NSInteger page;
/** 加载下一页时所需要传的参数 */
@property (nonatomic,copy) NSString *maxtime;
/** 保存params */
@property (nonatomic,strong) NSDictionary *params;
@end

static NSString * const XHTopicCellID = @"topic";
@implementation XHTopicViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self setupUI];
    
    [self setupRefresh];
}

-(void)setupUI{
    
    //注册cell --- 从nib中读取cell
    [self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([XHTopicViewCell class]) bundle:nil] forCellReuseIdentifier:XHTopicCellID];
    
    CGFloat height = XHNavBarMaxY + XHTitleViewH;
    CGFloat bottom =  self.tabBarController.tabBar.height;
    self.tableView.contentInset = UIEdgeInsetsMake(height, 0, bottom, 0);
    // 修改 tableView 指示条的位置 (不然会被导航条和顶部标签条覆盖)
    self.tableView.scrollIndicatorInsets = self.tableView.contentInset;
    
    self.view.backgroundColor = [UIColor clearColor];
    
    //去除分割线
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}

#pragma mark -
#pragma mark 刷新
-(void)setupRefresh{
    
    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewTopics)];
    
    //根据拖拽比例自动切换透明度
    self.tableView.mj_header.automaticallyChangeAlpha = YES;
    //一进页面就开始刷新
    [self.tableView.mj_header beginRefreshing];
    
    self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreTopics)];
    //防止一进来没有加载时候显示footer
//    self.tableView.mj_footer.hidden = YES;
    
}

#pragma mark -
#pragma mark 网络请求数据
-(void)loadNewTopics{
//    self.page = 0;
    //解决上拉下拉同时操作的后续小问题
    [self.tableView.mj_header endRefreshing];
    
    NSString *url = @"http://api.budejie.com/api/api_open.php";
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@"a"] = @"list";
    params[@"c"] = @"data";
    params[@"type"] = @(self.type);
    //记录params
    self.params = params;
    
    [[NetworkTools sharedTools]request:RequestMethodGet urlString:url parameters:params finished:^(id responseObject, NSError *error) {
        if (error != nil) {
            
            [SVProgressHUD showErrorWithStatus:@"网络错误"];
            // SVProgressHUD 可以显示背景遮罩View
            [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];
            //结束刷新
            [self.tableView.mj_header endRefreshing];
            return ;
        }
        //解决上拉下拉同时操作的问题,以最后一次拉的数据为准,但同时会有一个小问题,就是前面一次拉的动画还在,所以需要手动停止
        if (self.params != params) return;
        
        //存储maxtime
        self.maxtime = responseObject[@"info"][@"maxtime"];
        
        //解决下拉加载网络错误的问题
        self.page = 0;
        
        //如果遇到网络请求的数据太繁杂,可以把它保存至桌面的 plist 文件后查看,会清晰很多
        //        XHLog(@"%@",responseObject[@"list"]);
//                XHWriteToPlist(responseObject[@"list"], @"list");
        self.topics = [XHTopicModel mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];
        
        //数据一回来就刷新
        [self.tableView reloadData];
        
        [self.tableView.mj_header endRefreshing];
    }];
}

-(void)loadMoreTopics{
    //解决上拉下拉同时操作的后续小问题
    [self.tableView.mj_footer endRefreshing];
    
    self.page++;
    
    NSString *url = @"http://api.budejie.com/api/api_open.php";
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@"a"] = @"list";
    params[@"c"] = @"data";
    params[@"type"] = @(self.type);
    params[@"page"] = @(self.page);
    params[@"maxtime"] = self.maxtime;
    //记录params
    self.params = params;
    
    [[NetworkTools sharedTools]request:RequestMethodGet urlString:url parameters:params finished:^(id responseObject, NSError *error) {
        if (error != nil) {
            
            [SVProgressHUD showErrorWithStatus:@"网络错误"];
            // SVProgressHUD 可以显示背景遮罩View
            [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];
            //结束刷新
            [self.tableView.mj_footer endRefreshing];
            //解决网络错误导致页码++的问题
            self.page--;
            return ;
        }
        //解决上拉下拉同时操作的问题,以最后一次拉的数据为准,但同时会有一个小问题,就是前面一次拉的动画还在,所以需要手动停止
        if (self.params != params) return;
        
        //存储maxtime
        self.maxtime = responseObject[@"info"][@"maxtime"];
       
        NSArray *data = [XHTopicModel mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];
        //上拉加载需要拼接数据
        [self.topics addObjectsFromArray:data];
        
        //数据一回来就刷新
        [self.tableView reloadData];
        
        [self.tableView.mj_footer endRefreshing];
    }];
}

#pragma mark -
#pragma mark 数据源方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    //防止一进来没有加载时候显示footer
    self.tableView.mj_footer.hidden = !self.topics.count;
    return self.topics.count;
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:XHTopicCellID];
//    if (cell == nil) {
//        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:XHTopicCellID];
//    }
//    XHTopicModel *model = self.topics[indexPath.row];
//    cell.textLabel.text = model.name;
//    cell.detailTextLabel.text = model.create_time;
//    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:model.profile_image] placeholderImage:[UIImage imageNamed:@"defaultUserIcon"]];
    
    //先从缓存池中取
    XHTopicViewCell *cell = [tableView dequeueReusableCellWithIdentifier:XHTopicCellID];
//    if (cell == nil) {
//        //没有再创建
//        cell = [[NSBundle mainBundle]loadNibNamed:NSStringFromClass([XHTopicViewCell class]) owner:nil options:nil].lastObject;
//    }
    
    XHTopicModel *model = self.topics[indexPath.row];
    cell.topics = model;
    
    return cell;
}
#pragma mark -
#pragma mark 代理方法
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    
    //通过正文的长度来确定 cell 的高度 (通过字体大小 以及 正文的宽度)
    XHTopicModel *model = self.topics[indexPath.row];
   
    //因为以下代码调用的非常频繁,所以抽取到Model中去,并做判断
    // *** 此方法已经过期
//    CGFloat textH = [model.text sizeWithFont:[UIFont systemFontOfSize:15] constrainedToSize:CGSizeMake(XHScreenW - 2 * XHTopicViewCellMargin, CGFLOAT_MAX)].height;
    // 替换成 以下的方法
//    CGFloat textH = [model.text boundingRectWithSize:CGSizeMake(XHScreenW - 4 * XHTopicViewCellMargin, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:15]} context:nil].size.height;
    return model.cellHeight;
}

#pragma mark -
#pragma mark 懒加载
-(NSMutableArray *)topics{
    
    if (nil == _topics) {
        
        _topics = [NSMutableArray array];
    }
    return _topics;
}


@end
